package com.chee.plant.logic.user;

import java.util.Vector;

import org.json.JSONArray;

import com.chee.plant.hibernate.dao.UserDAO;

import com.chee.plant.hibernate.object.User;
import com.chee.plant.logic.CmdHandler;

import com.chee.plant.server.Message;

public class BuildFarmHandler implements CmdHandler {

	// 农田是从左上到右下看，可以看成5行3列，写成详细坐标就是这样：
	// (1,1),(1,2),(1,3)
	// (2,1),(2,2),(2,3)
	// (3,1),(3,2),(3,3)
	// (4,1),(4,2),(4,3)
	// (5,1),(5,2),(5,3)
	// 次序依次是 ：
	// 3 2 1
	// 6 5 4
	// 9 8 7
	// 12 11 10
	// 15 14 13

	/**
	 * 根据地块的xy坐标确定是第几块地
	 * 
	 * @param coord_x
	 *            x 坐标
	 * @param coord_y
	 *            y 坐标
	 * @return
	 */
	public int getNumber(int coord_x, int coord_y) {
		int number = 0;
		for (int i = 1; i < 6; i++) {
			if (coord_y == 1) {
				number = 3 * i - 1 + 1;
			} else if (coord_y == 2) {
				number = 3 * i - 2 + 1;
			} else {
				number = 3 * i - 3 + 1;
			}
		}
		return number;
	}

	// public Vector<Message> executeCmd(Message msg) {
	//		
	//		
	//		
	// // 进行数据库操作
	// List<User> list = new UserFriendDAO().getUserFriendByOwnerId(userId);
	// int result = 1;
	// Message ret = new Message(userId, PlantCmd.GetUserFriendList, result);

	// ArrayList<JSONObject> friendList = new ArrayList<JSONObject>();
	// Iterator<User> iter = list.iterator();
	// while (iter.hasNext()) {
	// User user = iter.next();
	// JSONObject obj = new JSONObject();
	// try {
	// obj.append("id", user.getId());
	// obj.append("name", user.getName());
	// } catch (JSONException e) {
	// // TODO Auto-generated catch block
	// // 添加json格式错误处理
	// e.printStackTrace();
	// }
	// // ....
	// friendList.add(obj);
	// }
	// ret.addVariable("list", friendList);
	// _msgs.add(ret);
	// return _msgs;
	//
	// }

	@Override
	public Vector<Message> executeCmd(Message msg) {

		JSONArray jsonArray = new JSONArray();
		// 扩建土地要求：等级和金钱。
		// 扩建第N块田需要等级N/2（取整），金钱100*N；，试验田金钱+10%
		// 扩建操作：点击图中“扩建”标牌即弹出扩建需要等级和金钱以及确认，如果用户等级或金钱不够，则确认按钮为灰。

		// 解析客户端传过来的内容 ,包括：
		// coord_x=? x坐标 coord_y=? y坐标

		int coord_x = Integer.parseInt(msg.getData("coord_x").toString());
		int coord_y = Integer.parseInt(msg.getData("coord_y").toString());

		Vector<Message> _msgs = new Vector<Message>();
		// 获取当前用户
		UserDAO dao = new UserDAO();
		int userId = msg.getUserId();
		User user = dao.getUserById(userId);

		// 确定是第几块地
		int number = new BuildFarmHandler().getNumber(coord_x, coord_y);

		// 确定扩建第N块地需要的等级 N/2(取整)
		int level = 0;
		if (number % 2 != 0) {
			// 如果number不是偶数，产生的计算结果就是double类型的
			double temp = (double) number / 2;
			double tempLevel = Math.ceil(temp);
			level = (int) tempLevel;
		} else {
			// 如果number是偶数，产生的计算结果就是int类型的
			level = number / 2;
		}

		// 计算需要的金币,由于试验田需要的不一样，需要区别对待。
		// 试验田分别是第 1，4，7，10，13 块田。
		int gold = 0;
		if (number == 1 || number == 4 || number == 7 || number == 10
				|| number == 13) {
			gold = 110 * number;
		}
		gold = number * 100;
		// 返回给前台的提示内容
		String tip = "";
		// 是否可以扩建
		boolean flag = false;
		if (user.getCropLevel() < level && user.getGold() < gold) {
			tip = "对不起，你的金币和等级均不足。";
			flag = false;
		} else if (user.getCropLevel() < level) {
			tip = "对不起，你的等级不足。";
			flag = false;
		} else if (user.getGold() < gold) {
			tip = "对不起，你的金钱不够。";
			flag = false;

		} else {
			// 如果排除了不能扩建的条件，就是可以扩建了。
			tip = "扩建这块土地需要等级" + level + "级和金币" + gold + "。";
			flag = true;
		}

		// 返回的内容应该包括是否可以扩建和提示信息

		// // 如果可以扩建，扣除用户相应的金币
		// if (flag == true) {
		// // 计算当前用户金币
		// int currentGold = user.getGold() - gold;
		// // 把用户当前金币重新赋值
		// user.setGold(currentGold);
		// //调用dao类更新方法
		// dao.update(user);
		//			
		// }

		return null;
	}

	/**
	 * 主方法，用于测试
	 * 
	 * @param args
	 */
	public static void main(String[] args) {

		// // 1 代码片断测试

		// int number=7;
		int number = 8;

		int level = 0;
		if (number % 2 != 0) {
			System.out.println("程序执行到奇数部分");
			// 如果number不是偶数，产生的计算结果就是double类型的
			double temp = (double) number / 2;
			System.out.println(temp);
			double tempLevel = Math.ceil(temp);
			System.out.println(tempLevel);
			level = (int) tempLevel;
			System.out.println(level + "lala");
		} else {
			// 如果number是偶数，产生的计算结果就是int类型的
			System.out.println("程序执行到偶数部分！");
			level = number / 2;
		}
		System.out.println(level);

	}
}
